# -*- encoding: utf-8 -*-
"""
@File    : onr_hot.py
@Author  : lilong
@Time    : 2022/12/12 10:42 下午
"""

import tensorflow as tf
from keras import backend as K
from keras.layers import Input, Lambda

# 输入数据(是个向量)需要编码的indices索引是[0,1,2]
x = [[0, 1, 2]]
x_mask = K.cast(K.greater(K.expand_dims(x, 2), 2), 'float32')
print('x_mask:', x_mask)

x = K.cast(x, 'int32')
x = K.one_hot(x, 10)
print('x:', x)
z = K.sum(x_mask * x, axis=1, keepdims=True)
print('z:', z)
# 转换成一维向量由0，1组成
g = K.cast(K.greater(z, 0.5), 'float32')
print(g)
# output: [3 x 3]
# [[1., 0., 0.],
#  [0., 1., 0.],
#  [0., 0., 1.]]


# 输入数据(是个向量)的需要编码的indices索引是[0,2,-1,1]
indices = [0, 2, -1, 1]
depth = 3
tf.one_hot(indices, depth,
           on_value=5.0, off_value=0.0,
           axis=-1)
# output: [4 x 3]
# [[5.0, 0.0, 0.0],  # one_hot(0)  对位置0处的数据进行one_hot编码
#  [0.0, 0.0, 5.0],  # one_hot(2)  对位置2处的数据进行one_hot编码
#  [0.0, 0.0, 0.0],  # one_hot(-1) 对位置-1处的数据进行one_hot编码
#  [0.0, 5.0, 0.0]]  # one_hot(1)  对位置1处的数据进行one_hot编码


# 输入数据是个2维矩阵
indices = [[0, 2], [1, -1]]
depth = 3
tf.one_hot(indices, depth,
           on_value=1.0, off_value=0.0,
           axis=-1)
# output: [2 x 2 x 3]
# [[[1.0, 0.0, 0.0],   # one_hot(0)  对位置(0,0)处的数据进行one_hot编码
#   [0.0, 0.0, 1.0]],  # one_hot(2)  对位置(0,2)处的数据进行one_hot编码
#  [[0.0, 1.0, 0.0],   # one_hot(1)  对位置(1,1)处的数据进行one_hot编码
#   [0.0, 0.0, 0.0]]]  # one_hot(-1) 对位置(1,-1)处的数据进行one_hot编码
